perm filename SLOOP.FAI[NEW,LCS]1 blob
sn#152809 filedate 1975-03-28 generic text, type T, neo UTF8
00100 TITLE SLOOP
00200 ENTRY RNOTE,DRWNT,RDRAW,SLOOP,CIRCLE,PSRT
00300 EXTERNAL PTR,XRN,STF,.COMM.,CLEFS,AMOD,LINES,ALF,SLR
00400 EXTERNAL EXP3.2,SIN,COS,ATAN2,PLTR,SIND,COSD
00500 DEFINE FIXX(N)
00600 < JUMPGE N,.+5
00700 MOVNS N
00800 FIX N,233000
00900 MOVNS N
01000 CAIA
01100 FIX N,233000 > ; TO FIX IT LIKE 'IFIX' DOES.
01200
01300 RB←15↔RX←14↔RA←13↔R←12↔KK←11↔LL←10↔RW←7↔RZ←6↔SY←5
01400 SLOOP: 0
01500 MOVE RB,.COMM.+=18 ;RB=RX/71.
01600 FDVR RB,[=71.0]
01700 SETZ KK, ;DO 81 K=0,71
01800 SLR81: MOVE RA,KK
01900 TLC RA,232000 ; FLOAT RA
02000 FADR RA,RA
02100 FMPR RA,RB
02200 FADR RA,.COMM.+4 ;81 SLURX(K+1)=RB*(K)+R3
02300 MOVEI 1,SLR
02400 ADDI 1,(KK)
02500 MOVEM RA,(1)
02600 CAIGE KK,=71
02700 AOJA KK,SLR81
02800 MOVE RA,.COMM.+=8 ;RA=R7*RST7
02900 FMPR RA,.COMM.+=17
03000 SKIPN RX,.COMM.+=10 ;41 IF(R9.EQ.0)R9=RZZ
03100 MOVE RX,[=2.8] ;RX IS R9
03200 SLR41: MOVE R,.COMM.+2 ;R=R+RA CENTR IS R
03300 FADR R,RA
03400 SETZ LL, ;L=0
03500 MOVE KK,[=36.0] ;DO 40 K=36,1,-1
03600 MOVNS RA
03700 SLR40: AOJ LL, ;L=L+1
03800 MOVE 2,KK ;RW=R-RA*(K/36.)**R9
03900 FDVR 2,[=36.0]
04000 MOVE 3,RX
04100 PUSHJ 17,EXP3.2 ; I HOPE! AC2=AC2**AC3
04200 FMPR 2,RA
04300 MOVE RW,2
04400 FADR RW,R
04500 MOVEI 1,ALF ; SLURY(L)=RW
04600 ADDI 1,(LL)
04700 MOVEM RW,(1) ;ALF IS 1 BEFORE SLURY(1)
04800 MOVE 2,[=73] ;40 SLURY(73-L)=RW
04900 SUBI 2,(LL)
05000 MOVEI 1,ALF
05100 ADDI 1,(2)
05200 MOVEM RW,(1)
05300 FSBR KK,[=1.0]
05400 JUMPG KK,SLR40
05500
05600 MOVE 2,.COMM.+=20 ;89 IF(RTILT.EQ.0)GO TO 87
05700 JUMPE 2,SLR87 ;RETURNS
05800 JSA 16,ATAN2 ;RW=ATAN2(RTILT,RXX)
05900 JUMP .COMM.+=20
06000 JUMP .COMM.+=19
06100 MOVE RW,0
06200 JSA 16,SIN ;RA=SIN(RW)
06300 JUMP RW ; ????
06400 MOVE RA,0
06500 JSA 16,COS ;RB=COS(RW)
06600 JUMP RW
06700 MOVE RB,0
06800 MOVE RZ,SLR ;RZ=SLURX(1)
06900 MOVE RW,ALF+1 ;RW=SLURY(1)
07000 MOVEI KK,SLR ;DO 83 K=1,L
07100 MOVEI 4,=72
07200 ADDI 4,-1(KK) ;ADR. OF SLURX(L+1)
07300 MOVEI SY,ALF+1
07400 SLR83: MOVE R,(KK) ;R=SLURX(K)-RZ
07500 FSBR R,RZ
07600 MOVE RX,(SY) ;RXX=SLURY(K)-RW
07700 FSBR RX,RW
07800 MOVN 2,RA ;SLURX(K)=RB*R-RA*RXX+RZ
07900 FMPR 2,RX
08000 FADR 2,RZ
08100 MOVE 3,R
08200 FMPR 3,RB
08300 FADR 3,2
08400 MOVEM 3,(KK)
08500 MOVE 2,RA ;83 SLURY(K)=RB*RXX+RA*R+RW
08600 FMPR 2,R
08700 FADR 2,RW
08800 MOVE 3,RX
08900 FMPR 3,RB
09000 FADR 3,2
09100 MOVEM 3,(SY)
09200 AOJ SY,
09300 CAIGE KK,(4)
09400 AOJA KK,SLR83
09500 SLR87: JRA 16,(16)
09600 A: 0
09700 B: 0
09800 L: 0
09900
10000 RNOTE: 0 ; SUBROUTINE RNOTE(X)
10100 MOVE 2,@(16) ;COMMON /PTR/PWDS(250),ITEM,L,I,IX/XRN/RN(4000)
10200 JSA 16,AMOD ;X=RN(IFIX(PWDS(IFIX(AMOD(X,1000.))))+2)
10300 JUMP 2
10400 JUMP [=1000.0]
10500 MOVE 2,0
10600 FIXX(2)
10700 MOVEI 3,PTR
10800 ADDI 3,(2) ;END
10900 MOVE 3,-1(3)
11000 FIXX(3)
11100 MOVEI 2,XRN
11200 ADDI 2,(3)
11300 MOVE 3,-1(2)
11400 MOVEM 3,@(16)
11500 JSA 16,1(16)
11600
11700 DRWNT: 0 ; SUBROUTINE DRWNT(RMINI)
11800 MOVE 5,.COMM.+2 ;COMMON /STF/RSTFAC(-3/4),RSTJ2
11900 MOVEM 5,A
12000 SETZM .COMM.+=29 ;COMMON R2,JA,CENTR,J2,RJQ(20),JQ(20)
12100 MOVE 7,.COMM.+=26;EQUIVALENCE (JE,JQ(3)),(RJD,RJQ(2)),(R6,RJQ(4)),
12200 MOVEM 7,B
12300 MOVE 6,.COMM.+7 ;1(JG,JQ(5)),(R7,RJQ(5)),(RJE,RJQ(3)),(RJZ,RJQ(20))
12400 MOVEM 6,L
12500 ;; MOVE 10,.COMM.+=8 ;1 ,(JI,JQ(7)),(R9,RJQ(7)),(JH,JQ(6))
12600 ;; MOVEM 10,SLOOP
12700 MOVE 2,@(16) ;RJX=CENTR
12800 FMPR 2,[=0.5] ;JH=0 J8
12900 ; JH=0 SO IT WILL FILL. (P8 IN 'CLEFS')
13000 FDVR 2,STF+=8 ;RA=R6
13100 MOVEM 2,.COMM.+7 ;R6=.5*RMINI/RSTJ2
13200 MOVEM 2,.COMM.+=8 ;R7=R6
13300 MOVE 2,.COMM.+=23 ;RJD=RJZ-3
13400 FSBR 2,[=3.0]
13500 MOVEM 2,.COMM.+5
13600 ; ADJUSTS POSITION FOR MINI ACCIDENTALS (..??!!)
13700 ;; MOVE 11,.COMM.+=30
13800 ;; MOVEM 11,RNOTE
13900 SETZM .COMM.+=30 ;JI=0
14000 JSA 16,CLEFS ;CALL CLEFS
14100 MOVE 11,.COMM.+=10
14200 FIXX(11)
14300 MOVEM 11,.COMM.+=30 ;JI=R9 (I SAVED JI IN 11)
14400 ; ↑↑↑↑↑↑ NEEDED??
14500 ; FOR WHITE NOTES AND ACCIS ON PLOTTER.
14600 MOVE 5,A
14700 MOVEM 5,.COMM.+2 ;CENTR=RJX
14800 MOVE 6,L
14900 MOVEM 6,.COMM.+7 ;R6=RA
15000 MOVE 7,.COMM.+=28
15100 TLC 7,232000
15200 FADR 7,7
15300 MOVEM 7,.COMM.+=8 ;R7=JG
15400 MOVE 10,.COMM.+6
15500 FIXX(10)
15600 MOVEM 10,.COMM.+=26 ;JE=RJE
15700 JRA 16,1(16) ;END (ALIGNMENT ABOVE IS OFF!)
15800
15900 RDRAW: 0 ; SUBROUTINE RDRAW(I,S,XY,X,R3,CENTR,RMINI)
16000 MOVEI 2,@2(16) ;C TO X,Y INTO ONE WORD
16100 ADD 2,@(16) ;DIMENSION XY(1)
16200 MOVE 3,@1(16) ;DO 2 K=I,IFIX(S)
16300 FIXX(3)
16400 MOVEI 10,@2(16)
16500 ADDI 10,(3)
16600 MOVEM 10,DRWNT ;SAVE IT FOR NOW
16700 RD2: MOVEI 4,2 ; L=2
16800 MOVE 5,-1(2) ; Y=XY(K)
16900 CAMGE 5,[=1000.0] ;IF(Y.LT.1000.)GO TO 3
17000 JRST RD3
17100 MOVEI 4,3 ;L=3
17200 FSBR 5,[=1000.0] ;Y=Y-1000.
17300 ; >1000 = INVIS. LINE
17400 RD3: MOVE 6,5 ;3 M=Y
17500 MOVEM 4,L
17600 FIXX(6) ; M
17700 MOVE 7,6 ;Y=(Y-M)*1000.
17800 TLC 7,232000
17900 FADR 7,7 ; FLOATS
18000 FSBR 5,7
18100 FMPR 5,[=1000.0] ; Y
18200 CAMG 5,[=100.0] ;IF(Y.GT.100.)Y=100-Y
18300 JRST RD4
18400 FSBR 5,[=100.0]
18500 MOVNS 5
18600 RD4: FMPR 5,@3(16)
18700 ; Y NUMBERS .GT.100 ARE NEG.
18800 FADR 5,@5(16) ;B=Y*X+CENTR
18900 CAIG 6,=60 ;IF(M.GT.60)M=100-M
19000 JRST RD5
19100 SUBI 6,=100
19200 MOVNS 6
19300 RD5: TLC 6,232000 ; A=M*RMINI+R3
19400 FADR 6,6
19500 FMPR 6,@6(16)
19600 FADR 6,@4(16)
19700 MOVEM 6,A
19800 MOVEM 5,B
19900 MOVEM 2,RNOTE ;SAVE IT FOR A SECOND
20000 JSA 16,LINES ;2 CALL LINES(A,B,L)
20100 JUMP A
20200 JUMP B
20300 JUMP L
20400 MOVE 2,RNOTE
20500 CAMGE 2,DRWNT
20600 AOJA 2,RD2
20700 JRA 16,7(16)
20800
20900 CIRCLE: 0 ; RA=5.96*RSJT2*R5
21000 MOVE RA,.COMM.+6
21100 FMPR RA,[=5.96]
21200 FMPR RA,STF+=8
21300 MOVE RB,.COMM.+=29 ;J8=J8*RDIS
21400 TLC RB,232000 ;FLOAT
21500 FADR RB,RB
21600 FMPR RB,PLTR+2
21700 MOVE RX,.COMM.+=28 ;IF(J7.LE.J6)J7=J7+360
21800 CAMLE RX,.COMM.+=27 ;RX IS J7
21900 JRST C2
22000 ADDI RX,=360
22100 C2: MOVEI RZ,6 ; KQ=6
22200 MOVE 2,PLTR ;IF(PLT)KQ=1
22300 SKIPGE 2
22400 MOVEI RZ,1
22500 MOVEM RZ,DRWNT ; DRWNT IS KQ
22600 C10: MOVE KK,.COMM.+=27 ;10 DO 3 K=J6,J7,KQ
22700 MOVEI LL,3 ;L=3
22800 MOVEM LL,L
22900 C3: MOVE R,KK ;R=K
23000 TLC R,232000
23100 FADR R,R
23200 MOVEM R,A ;CALL LINES(R3+RA*SIND(R),CENTR+RA*COSD(R),L)
23300 JSA 16,SIND
23400 JUMP A
23500 FMPR 0,RA
23600 FADR 0,.COMM.+4
23700 MOVEM 0,B
23800 JSA 16,COSD
23900 JUMP A
24000 FMPR 0,RA
24100 FADR 0,.COMM.+2
24200 MOVEM 0,A
24300 JSA 16,LINES
24400 JUMP B
24500 JUMP A
24600 JUMP L
24700 MOVEI LL,2 ;3 L=2
24800 MOVEM LL,L
24900 ADD KK,DRWNT
25000 CAIG KK,(RX)
25100 JRST C3
25200 FSBR RB,[1.0] ;J8=J8-1
25300 JUMPL RB,SLR87 ;IF(J8)RETURN
25400 MOVE 2,[1.0] ;RA=RA+1/RDIS
25500 FDVR 2,PLTR+2
25600 FADR RA,2
25700 JRST C10 ;GO TO 10
25800 ;JA=12 DRAWS CIRCLES. P5=RADIUS, P6=DEGR.1, P7=DEGR.2,P8=THICK(EXPANDS
25900 ;RETURN
25950
26000 ;; SUBROUTINE PSRT(P)
26100 ;; SORTS DATA TO SHORTEN INVISIBLE VECTORS WHEN PLOTTING.
26200 ;; IMPLICIT INTEGER(S-Z)
26300 ;; COMMON /XRN/RN(4000) /PTR/PWDS(250),ITEM,L,I,IX
26400 ;; DIMENSION P(250) **** AN ARGUMENT, INSTEAD.
26500 MM←1↔NN←2↔J←3↔LL←4↔ AA←6↔Y←7↔V←10 ↔LX←12↔RN←13↔K←14
26600 PSRT: 0 ; DO 4 K=1,ITEM
26700 MOVEI K,@(16) ; ADR OF P
26800 MOVEI MM,PTR ;L=PWDS(K)
26900 MOVE NN,PTR+=250 ; ITEM
27000 ADDI NN,-1(MM) ; LAST ADR. OF PWDS
27100 PL4: MOVE LX,(MM)
27200 FIXX(LX)
27300 ;;; MOVE LL,-1(MM) ;LL=PWDS(K-1)
27400 ;;; FIXX(LL)
27500 ;;; MOVE LM,1(MM) ;LM=PWDS(K+1)
27600 ;;; FIXX(LM)
27700 MOVEI RN,XRN ;A=RN(L+3)
27800 ADDI RN,(LX)
27900 MOVE AA,2(RN) ;(L+3)
28000 MOVE J,1(RN) ;P(K)=A+1000*RN(L+2)
28100 FMPR J,[=1000.0]
28200 FADR J,AA
28210 MOVE V,(RN) ; IF(RN(L+1).NE.16)GO TO 40
28220 CAME V,[=8.0] ;IF(RN(L+1).EQ.8)P(X)=P(X)-16
28230 JRST PLA
28240 FSBR J,[=16.0]
28250 MOVE AA,[=1000.0]
28300 PLA: MOVEM J,(K)
28500 CAME V,[16.0]
28600 JRST PL40
28700 MOVE Y,-1(MM) ;Y=PWDS(K-1)
28800 FIXX(Y)
29100 MOVEI AA,XRN ; IF(RN(Y+1).EQ.16)GO TO 41
29200 ADDI AA,(Y)
29300 MOVE RN,(AA)
29400 CAMN RN,[=16.0]
29500 JRST PL41
29510 MOVE V,1(MM) ;V=PWDS(K+1)
29520 FIXX(V)
29600 MOVEI AA,XRN ; IF(RN(V+1).EQ.16)GO TO 41
29700 ADDI AA,(V)
29800 MOVE RN,(AA)
29900 CAMN RN,[=16.0]
30000 JRST PL41
30100 JRST PLS ;GO TO 4
30300 PL40: JUMPGE AA,PLS ;40 IF(A.GE.0)GO TO 4
30400 PL41: MOVN AA,[=10000.0] ;41 P(K)=-10000
30500 MOVEM AA,(K)
30600 PLS: CAIL MM,(NN) ;4 CONTINUE
30700 JRST PLX
30800 AOJ MM,
30900 AOJA K,PL4
31100 ; PLOTS ALL NEG. POSITIONS FIRST.
31200 PLX: MOVE AA,PTR+=252 ;IX=I
31300 MOVEM AA,PTR+=253
31400 CAIL AA,=1500 ;IF(I.LT.1500)I=1500
31500 JRST PLY
31600 MOVEI AA,=1500
31700 MOVEM AA,PTR+=252
31800 PLY: MOVEI Y,(AA) ; Y=I
31900 ADD AA,PTR+=253 ;I=I+IX-1
32000 SUBI AA,1
32050 MOVEM AA,PTR+=252
32100 MOVEM Y,PTR+=253 ;IX=Y
32200 ; IX IS M IN MAIN PROG.
32300 ; LEAVES 1500 WDS IN RN FOR STORING "NOIR" DATA.
32400 PL2: MOVE AA,@(16) ;2 A=P(1)
32500 MOVEI LX,1 ;L=1
32600 MOVEI J,1
32700 MOVEI K,@(16) ;DO 1 K=1,ITEM
32800 MOVE NN,PTR+=250
32900 ADDI NN,(K) ;P(ITEM)
33000 PL1: CAMG AA,(K) ;IF(A.LE.P(K))GO TO 1
33100 JRST PLZ
33200 MOVE AA,(K) ;A=P(K)
33300 MOVE LX,J ;L=K
33400 PLZ: CAIL K,-1(NN) ;1 CONTINUE
33500 JRST PLW
33600 AOJ K,
33700 AOJA J,PL1
33900 PLW: CAMN AA,[=10000.0] ; IF(A.EQ.10000.)RETURN
34000 JRA 16,1(16)
34100 ; ALL ITEMS HAVE NOW BEEN SHUFFLED
34200 MOVEI V,PTR ;V=PWDS(L)
34300 ADDI V,(LX)
34400 MOVE V,-1(V)
34500 FIXX(V)
34600 MOVE AA,[=10000.0] ;P(L)=10000
34700 MOVEI J,@(16)
34800 ADDI J,(LX)
34900 MOVEM AA,-1(J)
35000 MOVEI LX,XRN ;L=RN(V)+2+Y
35100 ADDI LX,(V)
35200 MOVE LX,-1(LX)
35300 FIXX(LX)
35400 ADDI LX,2
35500 ADDI LX,(Y)
35550 SUBI V,(Y) ;V=V-Y
35800 ;; CALL LOOP(0,L,1,Y,V,RN)
35900 MOVEI K,XRN ;DO 3 K=Y,L
36000 ADDI K,(Y)
36100 MOVEI NN,XRN
36200 ADDI NN,(LX)
36300 PL3: MOVEI AA,(K)
36400 ADDI AA,(V) ;3 RN(K)=RN(K+V)
36500 MOVE AA,-1(AA)
36600 MOVEM AA,-1(K)
36700 CAIGE K,(NN)
36800 AOJA K,PL3
36900 ;; REPLACED SUBROUTINE LOOP
37000 MOVEI Y,(LX) ;Y=L+1
37100 ADDI Y,1
37200 JRST PL2 ;GO TO 2
37300 END